import re

### 在某字符串中匹配特定字符开头结尾
text = "【我去干】嘛呢asdfsdjf [sdaf]【撒地方】"

## 贪婪匹配
re.findall(r'【.*】',text)
#  ['【我去干】嘛呢asdfsdjf [sdaf]【撒地方】']

## 非贪婪匹配
re.findall(r'【.*?】',text)
# ['【我去干】', '【撒地方】']



## 匹配限制开头结尾，且不包括开头结尾

str="15838477645dfdfdf15887988765dfdf1157990087651fd157385367891fdf15826789876qqq15838545678a"

#方法一：限制手机号开头，或者手机号前面为非数字，且手机号结尾或者以非数字结尾
pattern1="(?:^|[^\d])(1\d{10})(?:$|[^\d])"

pattern1=r'(?:^|[^\d])([1][3-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9])(?:^|[^\d])'

phone_list1=re.compile(pattern1).findall(str)
#结果为：['15838477645', '15887988765', '15826789876', '15838545678']

# 方法二：利用负向零宽断言，断言手机号前后不能出现数字
pattern2="(?<!\d)(1\d{10})(?!\d)"
phone_list2=re.compile(pattern2).findall(str)
# 结果为：['15838477645', '15887988765', '15826789876', '15838545678']